<?php

namespace System\library;

/**
 * <b>Class</b> :        Benchmark<br>
 * <b>Fonction</b> :     Calculer le temps d'excution du script
 * <br>
 * @version              1.0
 * @author               Steuf
 * @version              2.0<br>
 *                       Ajout de la phpdoc<br>
 *                       Ajout de fonction cacul d'utilisation de la memoire
 * <br>
 * @author               Dread <dreadlokeur@gmail.com>
 * @license              Licence publique générale GNU http://www.gnu.org/licenses/gpl.html
 * @copyright            Copyright 2011 - MidichloriansPHP and contributors
 * @package              System
 * @subpackage           library
 */
class Benchmark {

    /**
     * L'attribut qui permet de stocker la premiere prise de temps
     *
     * @access private
     * @var int
     */
    private $_begin = 0;
    /**
     * L'attribut qui permet de stocker la derniere prise de temps
     *
     * @access private
     * @var int
     */
    private $_end = 0;
    /**
     * L'attribut qui permet de stocker la premiere prise d'utilisation de la memoire
     *
     * @access private
     * @var int
     */
    private $_beginMemory = 0;
    /**
     * L'attribut qui permet de stocker la derniere prise d'utilisation de la memoire
     *
     * @access private
     * @var int
     */
    private $_endMemory = 0;

    /**
     * Constructeur de la classe, de lancer la methode start() de l'objet
     *
     * @access public
     * @param void
     * @return void
     */
    public function __construct($startMemory = false) {
        $this->start();
        if ($startMemory)
            $this->startMemory();
    }

    /**
     * Permet d'assigner une valeur à l'attribut "begin", la valeur sera le retour d'un microtime()
     *
     * @access public
     * @param void
     * @return void
     */
    public function start() {
        $this->_begin = microtime(true);
        return $this;
    }

    /**
     * Permet d'assigner une valeur à l'attribut "beginMemory", la valeur sera le retour d'un memory_get_usage()
     *
     * @access public
     * @param void
     * @return void
     */
    public function startMemory() {
        $this->_beginMemory = memory_get_usage();
        return $this;
    }

    /**
     * Permet d'assigner une valeur à l'attribut "end", la valeur sera le retour d'un microtime()
     *
     * @access public
     * @param void
     * @return void
     */
    public function stop() {
        $this->_end = microtime(true);
        return $this;
    }

    /**
     * Permet d'assigner une valeur à l'attribut "endMemory", la valeur sera le retour d'un memory_get_usage()
     *
     * @access public
     * @param void
     * @return void
     */
    public function stopMemory() {
        $this->_endMemory = memory_get_usage();
        return $this;
    }

    /**
     * Permet de calculer le temps de generation: (end - begin) et de l'arrondir avec round()
     *
     * @access public
     * @param void
     * @return float roun($this->_end - $this->_begin)
     */
    public function getStats() {
        return round($this->_end - $this->_begin, 4);
    }

    /**
     * Permet de calculer la consomation de memoire depuis prise de consomation: endMemory - beginMemory
     *
     * @access public
     * @param void
     * @return int endMemory - beginMemory
     */
    public function getStatsMemory() {
        return $this->_endMemory - $this->_beginMemory;
    }

}

?>